package utils

import (
	"bytes"
	"crypto/md5"
	"encoding/hex"
	"io"
	"os"
)

func BytesToMd5(data []byte) (string, error) {
	return ReaderToMd5(bytes.NewReader(data))
}

func ReaderToMd5(reader io.Reader) (string, error) {
	// 创建一个新的hash对象并将输入数据写入其中
	h := md5.New()
	_, err := io.Copy(h, reader)
	// _, err := h.Write(data)
	if err != nil {
		return "", err
	}

	// 获取计算后的MD5值
	md5Bytes := h.Sum(nil)
	// result := fmt.Sprintf("%x", md5Bytes)
	result := hex.EncodeToString(md5Bytes)

	return result, nil
}

func StrToMd5(str string) (string, error) {
	return BytesToMd5([]byte(str))
}

func GetFileMd5Str(filePath string) (string, error) {
	// 打开文件
	file, err := os.Open(filePath)
	if err != nil {
		return "", err
	}
	defer file.Close()
	return ReaderToMd5(file)
}
